﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using QuanLyRapChieuPhim.BUS;
using QuanLyRapChieuPhim.DTO;

namespace QuanLyRapChieuPhim.GUI
{
    public partial class uscThemVe : UserControl
    {
        int Ma = -1;
        bool IsLoaded = false;

        public uscThemVe()
        {
            InitializeComponent();
        }

        private void uscThemVe_Load(object sender, EventArgs e)
        {
            IsLoaded = false;
            Ma = int.Parse(Tag.ToString());
            LoadDefault();
            IsLoaded = true;
        }

        private void btnThem_Click(object sender, EventArgs e)
        {
            Ma = 0;
            if (!Check())
                return;
            VeBUS BUS = new VeBUS();
            VeDTO DTO = new VeDTO
                (
                    0, int.Parse(cbSuatChieu.SelectedValue.ToString()),
                    cbHangGhe.SelectedIndex + 1, cbDayGhe.SelectedIndex + 1,
                    int.Parse(txtGiaVe.Text)
                );
            if (BUS.Add(DTO))
            {
                MessageBox.Show("Thêm thành công.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.None);
                return;
            }
            MessageBox.Show("Thêm thất bại.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.None);

        }

        private void btnCapNhap_Click(object sender, EventArgs e)
        {
            Ma = int.Parse(Tag.ToString());
            if (!Check())
                return;
            VeBUS BUS = new VeBUS();
            VeDTO DTO = new VeDTO
                (
                    Ma, int.Parse(cbSuatChieu.SelectedValue.ToString()),
                    cbHangGhe.SelectedIndex + 1, cbDayGhe.SelectedIndex + 1,
                    int.Parse(txtGiaVe.Text)
                );
            if (BUS.Update(DTO))
            {
                MessageBox.Show("Cập nhật thành công.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.None);
                return;
            }
            MessageBox.Show("Cập nhật thất bại.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.None);
        }

        private void btnDienLai_Click(object sender, EventArgs e)
        {
            LoadDefault();
        }

        private void cbSuatChieu_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (IsLoaded)
            {
                int masuat = int.Parse(cbSuatChieu.SelectedValue.ToString());
                SuatChieuDTO sc = new SuatChieuBUS().GetFromId(masuat);
                PhongChieuDTO pc = new PhongChieuBUS().GetFromId(sc.MaPhongChieu);

                txtGiaVe.Text = new VeBUS().GetGiaVe(sc.MaPhim).ToString();

                cbHangGhe.Items.Clear();
                cbDayGhe.Items.Clear();

                for (int i = 1; i <= pc.SoHangGhe; i++)
                {
                    cbHangGhe.Items.Add("Hàng " + i);
                }
                cbHangGhe.SelectedIndex = 0;

                for (int i = 1; i <= pc.SoDayGhe; i++)
                {
                    cbDayGhe.Items.Add("Dãy " + i);
                }
                cbDayGhe.SelectedIndex = 0;
            }
        }

        void LoadDefault()
        {
            try
            {
                lbsao01.Visible = false;
                lbsao02.Visible = false;
                lbsao03.Visible = false;
                lbsao04.Visible = false;
                lbThongBaoCMND.Visible = false;
                lbThongBaoNgaySinh.Visible = false;
                lbThongBaoSoDienThoai.Visible = false;
                gbThongTinKhachHang.Visible = false;
                txtCMND.Text = "";
                txtDiaChi.Text = "";
                txtDienThoai.Text = "";
                txtTenKhachHang.Text = "";


                VeDTO DTO = new VeBUS().GetFromId(Ma);

                cbSuatChieu.DataSource = new SuatChieuBUS().GetList();
                cbSuatChieu.DisplayMember = "TenSuatChieu";
                cbSuatChieu.ValueMember = "MaSuatChieu";
                if (DTO.MaSuatChieu != 0)
                    cbSuatChieu.SelectedValue = DTO.MaSuatChieu;
                else
                    cbSuatChieu.SelectedIndex = 0;

                SuatChieuDTO sc = new SuatChieuBUS().GetFromId(int.Parse(cbSuatChieu.SelectedValue.ToString()));
                txtGiaVe.Text = new VeBUS().GetGiaVe(sc.MaPhim).ToString();

                PhongChieuDTO pc = new PhongChieuBUS().GetFromId(sc.MaPhongChieu);
                for (int i = 1; i <= pc.SoHangGhe; i++)
                {
                    cbHangGhe.Items.Add("Hàng " + i);
                }
                cbHangGhe.SelectedIndex = (DTO.HangGhe - 1 < 0) ? 0 : DTO.HangGhe - 1;

                for (int i = 1; i <= pc.SoDayGhe; i++)
                {
                    cbDayGhe.Items.Add("Dãy " + i);
                }
                cbDayGhe.SelectedIndex = (DTO.DayGhe - 1 < 0) ? 0 : DTO.DayGhe - 1;
            }
            catch (Exception)
            {

            }
        }

        bool Check()
        {
            lbsao01.Visible = false;
            lbsao02.Visible = false;
            lbsao03.Visible = false;
            lbsao04.Visible = false;
            lbThongBaoCMND.Visible = false;
            lbThongBaoNgaySinh.Visible = false;
            lbThongBaoSoDienThoai.Visible = false;
            lbThongBao.Visible = false;
            int num;

            if (txtTenKhachHang.Text == "")
            {
                lbsao01.Visible = true;
                txtTenKhachHang.Focus();
                return false;
            }
            else if (txtCMND.Text == "")
            {
                lbsao02.Visible = true;
                txtCMND.Focus();
                return false;
            }
            else if (txtDienThoai.Text == "")
            {
                lbsao03.Visible = true;
                txtDienThoai.Focus();
                return false;
            }
            else if (txtDiaChi.Text == "")
            {
                lbsao04.Visible = true;
                txtDiaChi.Focus();
                return false;
            }
            else if (!int.TryParse(txtCMND.Text, out num))
            {
                lbThongBaoCMND.Text = "Số CMND không hợp lệ.";
                lbThongBaoCMND.Visible = true;
                txtCMND.Focus();
                return false;
            }
            else if (!int.TryParse(txtDienThoai.Text, out num))
            {
                lbThongBaoSoDienThoai.Visible = true;
                txtDienThoai.Focus();
                return false;
            }
            else if (dtpNgaySinh.Value.Year < 1910 || dtpNgaySinh.Value.Year > 1994)
            {
                lbThongBaoNgaySinh.Visible = true;
                dtpNgaySinh.Focus();
                return false;
            }
            int dayGhe = int.Parse(cbDayGhe.Text.Split(' ')[1].ToString());
            int hangGhe = int.Parse(cbHangGhe.Text.Split(' ')[1].ToString());
            if (new VeBUS().CheckTrong(int.Parse(cbSuatChieu.SelectedValue.ToString()),
                hangGhe, dayGhe) == 0)
            {
                lbThongBao.Visible = true;
                return false;
            }
            if (new NhanVienBUS().GetIDFromCMND(int.Parse(txtCMND.Text)) > 0
                || new KhachHangBUS().GetIDFromCMND(int.Parse(txtCMND.Text)) > 0)
            {
                lbThongBaoCMND.Text = "Số CMND dã được sử dụng.";
                lbThongBaoCMND.Visible = true;
                txtCMND.Focus();
                return false;
            }
            return true;
        }

        private void btnBanVe_Click(object sender, EventArgs e)
        {
            if (gbThongTinKhachHang.Visible == false)
            {
                gbThongTinKhachHang.Visible = true;
                txtTenKhachHang.Focus();
            }
            else
            {
                if (!Check())
                    return;
                else
                {
                    if (MessageBox.Show("Bán vé này?", "Hệ thống", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
                    {
                        string gioitinh = (rdNam.Checked == true)?"Nam":"Nữ";
                        KhachHangDTO KhachHang = new KhachHangDTO
                            (
                            0, txtTenKhachHang.Text, txtCMND.Text,
                            dtpNgaySinh.Value, gioitinh, txtDiaChi.Text, txtDienThoai.Text
                            );
                        if (new KhachHangBUS().Add(KhachHang))
                        {
                            VeBUS BUS = new VeBUS();
                            int MaKhachHang = new KhachHangBUS().GetIDFromCMND(int.Parse(txtCMND.Text));
                            BUS.BanVe(Ma, MaKhachHang);
                            Ma = 0;
                            LoadDefault();
                        }
                    }
                    else
                        return;
                }
            }
        }

    }
}
